#pragma once

#include <iostream>
#include <string>
#include <functional>
#include "InetAddr.hpp"

using func_t = std::function<void()>;
// 分层中的第二层,描述一个连接,listenfd和普通IOfd的基类,使得所有fd的处理方式采用同一种
class Connection
{
public:
private:
    int _sockfd;
    // 用户级缓冲区,用于从内核级缓冲区拷贝数据,因为内核级缓冲区用户不能直接访问,且从中读上来的不一定是完整的报文
    // 所以要放在用户级缓冲区暂存起来,直至读到完整的报文再进行处理
    std::string _inbufffer;
    std::string _outbuffer;
    InetAddr client; // 这个sockfd对应的客户端
    // 回调方法
    func_t _recver;
    func_t _sender;
    func_t _excepter;
    uint32_t events;  //这个connect要关心的事件
};